/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.control.gui.system;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import net.codjo.gui.toolkit.swing.GenericRenderer;
import net.codjo.i18n.common.TranslationManager;
import net.codjo.i18n.gui.InternationalizableContainer;
import net.codjo.i18n.gui.TranslationNotifier;
import net.codjo.mad.client.request.RequestException;
import net.codjo.mad.gui.framework.GuiContext;
import net.codjo.mad.gui.i18n.InternationalizableRequestTable;
import net.codjo.mad.gui.i18n.InternationalizationUtil;
import net.codjo.mad.gui.request.PreferenceFactory;
import net.codjo.mad.gui.request.RequestTable;
import net.codjo.mad.gui.request.RequestToolBar;
import static net.codjo.mad.gui.i18n.InternationalizationUtil.*;
class SourceSystemWindow extends JInternalFrame implements InternationalizableContainer {
private JScrollPane scrollPane = new JScrollPane();
private RequestTable requestTable = new RequestTable();
private RequestToolBar toolBar = new RequestToolBar();
private TranslationManager translationManager;
private TranslationNotifier notifier;
private GuiContext guiContext;
SourceSystemWindow(GuiContext ctxt) throws RequestException {
super("Syst�me", true, true, true, true);
guiContext = ctxt;
jbInit();
initInternationalization(ctxt);
requestTable.setEditable(true);
requestTable.setPreference("SourceSystemWindow");
initDecimalSeparatorStuff();
initDateFormatStuff();
toolBar.setHasExcelButton(true);
toolBar.setHasValidationButton(true);
toolBar.setHasUndoRedoButtons(true);
toolBar.init(ctxt, requestTable);
requestTable.load();
}
private void initInternationalization(GuiContext context) {
notifier = retrieveTranslationNotifier(context);
translationManager = retrieveTranslationManager(context);
notifier.addInternationalizableContainer(this);
}
public void addInternationalizableComponents(TranslationNotifier translationNotifier) {
translationNotifier.addInternationalizableComponent(this, "SourceSystemWindow.title");
translationNotifier.addInternationalizableComponent(
new InternationalizableRequestTable(PreferenceFactory.getPreference("SourceSystemWindow"), requestTable));
}
private void initDateFormatStuff() {
Map<String, String> map = new HashMap<String, String>();
map.put("yyyyMM", translate("SourceSystemWindow.period", guiContext) + " (197303)");
map.put("dd-MM-yy", "jj-mm-aa (18-03-73)");
map.put("dd-MM-yyyy", "jj-mm-aaaa (18-03-1973)");
map.put("yyyyMMdd", "aaaammjj (19661010)");
map.put("dd/MM/yy", "jj/mm/aa (18/03/73)");
map.put("dd/MM/yyyy", "jj/mm/aaaa (18/03/1973)");
map.put("ddMMyyyy", "jjmmaaaa (05091977)");
SourceSystemRenderer renderer = new SourceSystemRenderer(map);
JComboBox combo = new JComboBox(new String[]{
"dd-MM-yy", "dd-MM-yyyy", "yyyyMMdd", "dd/MM/yy", "dd/MM/yyyy",
"ddMMyyyy", "yyyyMM"
});
combo.setEditable(true);
combo.setName("SourceSystemWindow.dateFormat");
combo.setRenderer(renderer);
requestTable.setCellEditor("dateFormat", new DefaultCellEditor(combo));
requestTable.setCellRenderer("dateFormat", renderer);
}
private void initDecimalSeparatorStuff() {
Map<String, String> map = new HashMap<String, String>();
map.put(".", translate("SourceSystemWindow.dot", guiContext));
map.put(",", translate("SourceSystemWindow.comma", guiContext));
GenericRenderer renderer = new GenericRenderer(map);
JComboBox combo = new JComboBox(new String[]{".", ","});
combo.setRenderer(renderer);
requestTable.setCellEditor("decimalSeparator", new DefaultCellEditor(combo));
requestTable.setCellRenderer("decimalSeparator", renderer);
}
private void jbInit() {
this.getContentPane().add(scrollPane, BorderLayout.CENTER);
this.getContentPane().add(toolBar, BorderLayout.SOUTH);
scrollPane.getViewport().add(requestTable, null);
}
private class SourceSystemRenderer extends GenericRenderer {
SourceSystemRenderer(Map traductTable) {
super(traductTable);
}
@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
return setLabelColor(label, value, isSelected);
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JLabel label = (JLabel)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
return setLabelColor(label, value, isSelected);
}
private Component setLabelColor(JLabel label, Object value, boolean isSelected) {
if (label.getForeground().equals(Color.red)) {
SimpleDateFormat dateFormat = new SimpleDateFormat(value.toString());
Date currentDate = new Date();
try {
dateFormat.format(currentDate);
if (isSelected) {
label.setForeground(UIManager.getColor("Table.selectionForeground"));
}
else {
label.setForeground(UIManager.getColor("Table.foreground"));
}
}
catch (IllegalArgumentException e) {
label.setForeground(Color.red);
}
}
return label;
}
}
}